package cn.itcast.demo06;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

/*
          java.util.Properties extends Hashtable
     Properties 类表示了一个持久的属性集，Properties 可保存在流中或从流中加载
     Properties 集合是一个唯一和IO流相结合的集合
     可以使用Properties 集合中的方法store，把集合中的临时数据，持久化写入到硬盘中存储
     可以使用Properties 集合中的方法load，把硬盘中的保存的文件（键值对） ，读取到集合中使用

     属性列表中的每个键值都是一个字符串
         Properties集合是一个双列集合，key和value都是字符串

 */
public class Demo02Properties {
    public static void main(String[] args) throws IOException {
        show02();
    }

    private static void show02() throws IOException {
        /*//void store(OutputStream out, String comments)
        //          以适合使用 load(InputStream) 方法加载到 Properties 表中的格式，将此 Properties 表中的属性列表（键和元素对）写入输出流。
        // void store(Writer writer, String comments)
        //          以适合使用 load(Reader) 方法的格式，将此 Properties 表中的属性列表（键和元素对）写入输出字符。
        参数；
        OutputStream out；字节输出流，不能写中文
         Writer writer；字符输出流，可以写中文
         String comments；注释，用来解释说明保存的文件是做什么用的
            不能使用中文会产生乱码，默认使用Unicode编码
            一般使用“空字符串”
            使用步骤；
            1，创建Properties集合对象，添加数据
            2，创建字节输出流/字符输出流对象，构造方法中绑定要输出的目的地
            3，使用Properties集合中 的方法store，把集合中的临时数据，持久化写入到硬盘中存储
            4，释放资源
         */
        //1，创建Properties集合对象，添加数据
        Properties prop = new Properties();
        //使用setProperty往集合中添加数据
        prop.setProperty("赵丽颖","165");
        prop.setProperty("高圆圆","162");
        prop.setProperty("古力娜扎","161");

        /*//2，创建字节输出流/字符输出流对象，构造方法中绑定要输出的目的地
        FileWriter fw = new FileWriter("E:\\WkJava\\day02-code\\prop.txt");

        //3，使用Properties集合中 的方法store，把集合中的临时数据，持久化写入到硬盘中存储
        prop.store(fw,"save data");

        //  4，释放资源
        fw.close();

         */

        //使用字节流
        prop.store(new FileOutputStream("E:\\WkJava\\day02-code\\prop2.txt"),"");


    }

    private static void show() {
        // Object setProperty(String key, String value)
        //          调用 Hashtable 的方法 put。
        //String getProperty(String key) 通过key找到value，相当于get
        //Set<String> stringPropertyNames()
        //创建Properties集合对象
        Properties prop = new Properties();
        //使用setProperty往集合中添加数据
        prop.setProperty("赵丽颖","165");
        prop.setProperty("高圆圆","162");
        prop.setProperty("古力娜扎","161");

        //使用stringPropertyNames把Properties集合中的键取出，存储到一个set集合中
        Set<String> set = prop.stringPropertyNames();

        //遍历集合
        for (String key : set) {

            //使用getProperty方法通过key获取value
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }
}
